#!/bin/bash
set -e

# --- News FFI 模块编译脚本 ---
# 本脚本仅用于在本地开发环境中编译 Go 源代码为 .so 共享库。

echo "[BUILD] 进入 ffi 目录..."
cd ffi

echo "[BUILD] 开始编译 Go 源码..."
# 运行 make 命令，它会处理清理和编译的全部工作
make

echo "[BUILD] 编译成功！ lib_news.so 已更新。"
echo ""
echo "==================== 重要提醒 ===================="
echo "下一步，你必须手动重启 PHP-FPM 服务来清除缓存，"
echo "否则你的代码改动将不会生效！"
echo ""
echo "请运行以下命令:"
echo "docker-compose restart php"
echo "================================================"

# 返回原始目录
cd ..

# 2. 生成 PHP FFI 适配层
cat > $BUILD_DIR/NewsServiceFFI.php <<EOF
<?php
class NewsService
{
    protected $ffi;
    public function __construct()
    {
        $this->ffi = FFI::cdef(
            file_get_contents(__DIR__ . '/lib_news.h'),
            __DIR__ . '/lib_news.so'
        );
    }
    public function getList()
    {
        return json_decode(FFI::string($this->ffi->GetList()), true);
    }
    public function getById($id)
    {
        return json_decode(FFI::string($this->ffi->GetById($id)), true);
    }
    public function create($data)
    {
        return $this->ffi->Create(json_encode($data));
    }
    public function update($id, $data)
    {
        return $this->ffi->Update($id, json_encode($data));
    }
    public function delete($id)
    {
        return $this->ffi->Delete($id);
    }
    public function generateSummary($content)
    {
        return FFI::string($this->ffi->GenerateSummary($content));
    }
    public function checkContent($content)
    {
        return $this->ffi->CheckContent($content);
    }
    public function extractKeywords($content)
    {
        return explode(',', FFI::string($this->ffi->ExtractKeywords($content)));
    }
}
EOF

echo "[build] PHP FFI 适配层已生成。" | tee -a $LOG_FILE

# 3. 自动打包 build 目录
cd $BUILD_DIR
zip -r package.zip ./* > /dev/null
cd ..
echo "[build] 已自动打包为 $PACKAGE" | tee -a $LOG_FILE

echo "[build] FFI 动态库和 PHP 适配层已生成到 build/ 目录。详见 $LOG_FILE" 